home *** CD-ROM | disk | FTP | other *** search
- ;
- ; TREE.VL : ô±ò¬ÆTì⌡û╪
- ;
- ; Copyright (C) 1998 by Makoto Hiroi
- ;
-
- ;
- ; èiö[é╖éΘâfü[â^é╔é═üAăé╠âüâ\âbâhé≡ÆΦï`é╖éΘé▒é╞
- ;
- ; compare-object obj1 obj2 : obj1 < obj2 -> -1
- ; obj1 = obj2 -> 0
- ; obj1 > obj2 -> 1
- ;
- ; print-object obj1 : âfü[â^é╠ò\Ī
- ;
-
- ;
- ; ô±ò¬û╪
- ;
- (defclass Tree () (root)) ; âïü[âg
-
- ;
- ; É▀
- ;
- (defclass Node ()
- (object ; âfü[â^
- left ; ì╢é╠Äq
- right)) ; ëEé╠Äq
-
-
- ;
- ; ÆTì⌡é╖éΘ
- ;
- (defmethod search-tree ((tree Tree) data)
- (search-node (slot-value tree 'root) data))
-
- ; ì─ïAö┼
- (defun search-node (node data)
- (if node
- (with-slots (object left right) node
- (case (compare-object data object)
- (0 t)
- (1 (search-node right data))
- (-1 (search-node left data))))))
-
-
- ;
- ; æ}ôⁿé╖éΘ
- ;
- (defmethod insert-tree ((tree Tree) data)
- (with-slots (root) tree
- (setq root (insert-node root data))))
-
-
- ; ì─ïAö┼
- (defun insert-node (node data)
- (if (null node)
- (make-instance 'Node 'object data)
- (with-slots (object left right) node
- (case (compare-object data object)
- (1 (setq right (insert-node right data)))
- (-1 (setq left (insert-node left data))))
- node)))
-
-
- ;
- ; ò\Īé╖éΘ
- ;
- (defmethod print-tree ((tree Tree))
- (print-node (slot-value tree 'root)))
-
- ;
- ; Æ╩éΦé¬é»Åçé┼Åoù═
- ;
- (defun print-node (node)
- (if node
- (with-slots (object left right) node
- (print-node left)
- (print-object object)
- (print-node right))))
-
- ; ò\Ī
- (defmethod print-object ((data t))
- (print data))
-
- ;
- ; öΣèrâüâ\âbâh
- ;
- ; ÉöÆl
- (defmethod compare-object ((n1 number) (n2 number))
- (cond ((= n1 n2) 0)
- ((< n1 n2) -1)
- (t 1)))
-
- ; ò╢ÄÜù±
- (defmethod compare-object ((s1 string) (s2 string))
- (cond ((string= s1 s2) 0)
- ((string< s1 s2) -1)
- (t 1)))
-
- ;
- ; âeâXâg
- ;
- ;
- ;(defvar *tree1* (make-instance 'Tree))
- ;(defvar *tree2* (make-instance 'Tree))
- ;
- ;(dotimes (x 10)
- ; (insert-tree *tree1* (rand)))
- ;
- ;(print-tree *tree1*)
- ;
- ;(dolist (x '("setq" "print" "defun" "cond" "string"
- ; "number" "dolist" "right" "left" "object"))
- ; (insert-tree *tree2* x))
- ;
- ;(print-tree *tree2*)
-
- ; end of file
-